package com.wgzx.modbus.util;

import io.netty.channel.Channel;
import io.netty.util.concurrent.Future;

public final class ModbusUtil {

    /**
     * 取消Future
     *
     * @param future
     */
    public static void cancelFuture(Future future) {
        if (future != null && !future.isCancelled()) {
            future.cancel(true);
        }
    }

    /**
     * 关闭channel
     *
     * @param channel
     */
    public static void closeChannel(Channel channel) {
        if (channel != null) {
            channel.close();
        }
    }

    /**
     * 检查参数不能为负数
     *
     * @param parameterValue 参数值
     * @param parameterName  参数名称
     * @throws IllegalArgumentException
     */
    public static void validateNonNegative(int parameterValue, String parameterName) throws IllegalArgumentException {
        if (parameterValue < 0) {
            throw new IllegalArgumentException("'" + parameterName + "'不能小于0");
        }
    }

    /**
     * 检查参数不能为NULL
     *
     * @param parameterValue 参数值
     * @param parameterName  参数名称
     * @throws IllegalArgumentException
     */
    public static void validateNonNull(Object parameterValue, String parameterName) throws IllegalArgumentException {
        if (parameterValue == null) {
            throw new IllegalArgumentException("'" + parameterName + "'不能为Null");
        }
    }

    /**
     * 检查参数取值范围
     *
     * @param parameterValue 参数值
     * @param parameterName  参数名称
     * @param minValue 最小值
     * @param maxValue 最大值
     */
    public static void validateRange(int parameterValue, String parameterName, int minValue, int maxValue) {
        if(!(parameterValue >= minValue && parameterValue <= maxValue)) {
            throw new IllegalArgumentException("'" + parameterName + "'范围必须在:" + minValue + "~" + maxValue + "之间");
        }
    }
}
